package mylogger;

public class MyLogger {
	private MyAsyncFileAppender defaultAppender = MyAsyncFileAppender.getInstance();
	private int loggingLevel=2;
	
	public void info(String msg){
		defaultAppender.addMessage("[INFO] " + MyAsyncFileAppender.getDate() + " " + msg);
	}
	
	public void info(String msg, Object o){

			
			String modifiedMsg = replaceByString(msg,o);
			defaultAppender.addMessage("[INFO] " + MyAsyncFileAppender.getDate() + " " + modifiedMsg);
		
	}
	
	public void debug(String msg){

		defaultAppender.addMessage("[DEBUG] " + MyAsyncFileAppender.getDate() + " " + msg);
	}
	
	public void debug(String msg, Object o){
		if (this.loggingLevel>=3){
			String modifiedMsg = replaceByString(msg,o);
			defaultAppender.addMessage("[DEBUG] " + MyAsyncFileAppender.getDate() + " " + modifiedMsg);
			
		}
	}
	
	
	public void error(String msg){
		if (this.loggingLevel>=1)
		defaultAppender.addMessage("[ERROR] " + MyAsyncFileAppender.getDate() + " " + msg);
	}
	
	public void error(String msg, Object o){
		if (this.loggingLevel>=1){
			String modifiedMsg = replaceByString(msg,o);
			defaultAppender.addMessage("[ERROR] " + MyAsyncFileAppender.getDate() + " " + modifiedMsg);
			
		}
	}
	
	public boolean isDebugEnabled(){
		return (this.loggingLevel==3);
	}
	
	public boolean isInfoEnabled(){
		return (this.loggingLevel==2);
	}
	
	public boolean isErrorEnabled(){
		return (this.loggingLevel==1);
	}
	
	public void setLoggingLevel(LoggingLevel loggingLevel){
		switch (loggingLevel.toString()){
			case "info":
				this.loggingLevel=2;
				break;
			case "debug":
				this.loggingLevel=3;
				break;
			case "error":
				this.loggingLevel=1;
				break;
		}
	}
	
	public String replaceByString(String msg,Object o){
		return msg.replaceAll("\\{\\}", o.toString());
	}
	
	
}
